package modelo;

import java.util.HashMap;
import java.util.Map;
import modelo.*;

public class Trem {

	private Maquinista maquinista;
	private Map<String, Pessoa> passageiros;
	private float velocidadeAtual;
	private float velocidadeMaxima;
	private short capacidade;
	private Viagem viagemAtual;

	public Trem(Maquinista maquinista, float velocidadeMaxima, int i) {

		this.maquinista = maquinista;
		this.velocidadeMaxima = velocidadeMaxima;
		this.capacidade = (short) i;
		passageiros = new HashMap<String, Pessoa>();
		velocidadeAtual = 0;
		viagemAtual = null;
	}

	public boolean inserePassageiro(Pessoa passageiro) {

		boolean inserido = false;

		if (passageiros.size() < capacidade) {
			passageiros.put(passageiro.getCpf(), passageiro);
			inserido = true;
		}
		return inserido;
	}

	public void removePassageiro(Pessoa pessoa) {

		if (passageiros.containsKey(pessoa.getCpf())) {

			passageiros.remove(pessoa.getCpf());
		}
	}

	public short quantiaPassageiros() {

		return (short) passageiros.size();
	}

	public void insereViagem(Viagem viagem) {

		this.viagemAtual = viagem;

	}

	public void retiraViagem() {

		this.viagemAtual = null;
	}

	public boolean podeAcelerar() {

		return velocidadeAtual < velocidadeMaxima;
	}

	public boolean podeFrear() {

		return velocidadeAtual > 0;
	}

	public void acelerar(float valor) {

		if (podeAcelerar()) {

			if ((valor + velocidadeAtual) <= velocidadeMaxima) {

				velocidadeAtual += valor;

			} else {

				velocidadeAtual = velocidadeMaxima;
			}
		}
	}

	public void frear(float valor) {

		if (podeFrear()) {

			if ((velocidadeAtual - valor) >= 0) {

				velocidadeAtual -= valor;

			} else {
				parar();
			}
		}
	}

	public void parar() {

		velocidadeAtual = 0;
	}

	public String toString() {
		String s = "===== Trem =====";
		s = s + "\n" + "Maquinista: " + maquinista + "\n"
				+ "Velocidade Atual: " + velocidadeAtual + "\n"
				+ "Velocidade Maxima: " + velocidadeMaxima;
		return s;
	}
}
